home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 January: Mac OS SDK / Dev.CD Jan 98 SDK1.toast / Development Kits (Disc 1) / MacTCP / MacTCP Developer Tools / 802 LAP / LAPMisc.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-21  |  8.5 KB  |  199 lines  |  [TEXT/MPS ]

  1. /* LAPMisc.h
  2.     C definitions of parameter block entries needed for IEEE 802.3 LAP
  3.  
  4.     Copyright Apple Computer, Inc. 1990-91    All rights reserved
  5.  
  6. */
  7.  
  8. /* IP internal error codes */
  9. #define ipOpenProtErr            -23030            /* can't open new protocol, table full */
  10. #define ipCloseProtErr            -23031            /* can't find protocol to close */
  11. #define ipBadWDSErr                -23034            /* error in WDS format */
  12. #define ipQuenchErr                -23038            /* destination being quenched */
  13.  
  14.  
  15. struct IPwdsEntry {
  16.     unsigned short    length;                        /* length of buffer */
  17.     struct ip4_header *ptr;                        /* pointer to buffer */
  18.     };
  19.     
  20. struct icmpEchoInfo {
  21.     unsigned long echoRequestOut;    /* time in ticks of when the echo request went out */
  22.     unsigned long echoReplyIn;        /* time in ticks of when the reply was received */
  23.     struct rdsEntry echoedData;        /* data received in responce */
  24.     Ptr options;
  25.     unsigned long userDataPtr;        /* user Ptr for Apps use */
  26.     };
  27.         
  28. /* define standard structure for IP packet buffer */
  29. /* NOTE: TCP and UDP use PKT.equ for definition of IPB */
  30.  
  31. typedef struct ipbuf {
  32.     CntrlParam        iop;                /* MAC OS I/O Param block */
  33.     struct icmpEchoInfo echoInfo;
  34.     struct ipbuf    *segipb;            /* pointer to segment's IPB if fragmented */
  35.     struct LapInfo *lap;                /* LAP pointer */
  36.     ProcPtr            lap_ioc;            /* local net completion routine */
  37.     ProcPtr            ip_ioc;                /* IP completion routine */
  38.     ProcPtr            tp_ioc;                /* transport completion routine */
  39.     ProcPtr            data_ioc;            /* data IOC */
  40.     struct wdsEntry laphdr;                /* local net header */
  41.     struct IPwdsEntry    ip;                /* IP header */
  42.     struct wdsEntry    tp;                    /* TCP/UDP or ICMP header */
  43.     struct wdsEntry    data;                /* TCP/UDP data */
  44.     struct wdsEntry    d1;
  45.     struct wdsEntry    d2;
  46.     struct wdsEntry    d3;
  47.     struct wdsEntry d4;                    /* 8 wds entries plus 0 terminator */
  48.     short            flag;                /* zero terminator to WDS */
  49.     char            packet[];            /* start of variable length pkt */
  50. } ipbuf;
  51.  
  52. /* definition of a "read data structure" for gather reads & holding protocol
  53.    handler information */
  54. struct rdStruct {
  55.     ProcPtr            ph_rp;                /* pointer to "ReadPacket" routine (a4) */
  56.     ProcPtr            ph_rr;                /* pointer to "ReadRest" routine 2(a4) */
  57.     long            ph_bytesleft;        /* number of bytes left to read */
  58.     union {
  59.         /* storage for standard AppleTalk LAP protocol handler */
  60.         struct {
  61.             long    phb_a4;                /* used by driver */
  62.             long    phb_a0;                /* used by driver */
  63.             long    phb_a1;                /* used by driver */
  64.             long    phb_a2;                /* used by driver */
  65. #define ph_a0    rdsparm.phb.phb_a0
  66. #define ph_a1    rdsparm.phb.phb_a1
  67. #define ph_a2    rdsparm.phb.phb_a2
  68. #define ph_a4    rdsparm.phb.phb_a4
  69.             } phb;
  70.  
  71.         /* storage for a buffered LAP interface */
  72.         struct {
  73.             b_8 *    lnb_ptr;            /* pointer to next byte to get from buffer */
  74. #define lnbuf_ptr    rdsparm.lnb.lnb_ptr
  75.             } lnb;
  76.             
  77.         /* storage for reassembled IP packet */
  78.         struct {
  79.             struct fragment *rsmb_fragbuffer;    /* pointer to fragment data buffer */
  80.             b_8 *    rsmb_ptr;            /* pointer to next byte to get from buffer */
  81.             int        rsmb_bytesleft;        /* number of bytes left in this buffer */
  82.             int        rsmb_byteoffset;    /* offset of next byte in rsm'd pkt */
  83. #define    rsm_fragbuffer    rdsparm.rsm.rsmb_fragbuffer
  84. #define rsm_ptr            rdsparm.rsm.rsmb_ptr
  85. #define rsm_bytesleft    rdsparm.rsm.rsmb_bytesleft
  86. #define rsm_byteoffset    rdsparm.rsm.rsmb_byteoffset
  87.             } rsm;
  88.         } rdsparm;
  89.     Boolean            lapBroadcast;        /* LAP-level broadcast */
  90.     Boolean            ipBroadcast;        /* IP-level broadcast */
  91.     struct LAPInfo *lap;                /* information about receiving LAP */
  92.     struct wdsEntry laphdr;                /* local net header */
  93.     struct IPwdsEntry    ip;                /* ip header */
  94.     struct wdsEntry    tp;                    /* TCP/UDP or ICMP header */
  95.     struct wdsEntry    data;                /* TCP/UDP data */
  96. };
  97.  
  98.  
  99. #define String(size) struct {\
  100.     unsigned char length; unsigned char text[size];}
  101.  
  102. struct IPConfig {
  103.     int            version;            /* version number */
  104.     long        flags;                /* options flags enabled for this LAP */
  105.     long        dfl_ip_addr;        /* default IP address */
  106.     long        dfl_net_mask;        /* default subnet mask */
  107.     long        dfl_broadcast_mask;    /* default broadcast mask */
  108.     long        dfl_gwy_addr;        /* default gateway address */
  109.     unsigned char    server_lap_addr[8];    /* default server lap address (8 bytes) */
  110.     long         configIPAddr;        /* mechanism by which IP addr was obtained */
  111.     long        configNetMask;        /* mechanism by which net mask was obtained */
  112.     long        dfl_dyn_low;        /* dynamic address field lower bound */
  113.     long        dfl_dyn_high;        /* dynamic address field upper bound */
  114.     String(32)    dfl_zone;            /* AppleTalk gateway zone */
  115.     /* align to word */
  116.     Boolean     load;                /* true - load driver into system */
  117.     Boolean        admin;                /* true - allow admin cdev functions */
  118.     Boolean        netLock;            /* true - lock net number */
  119.     Boolean        subnetLock;            /* true - lock subnet number */
  120.     Boolean        nodeLock;            /* true - lock node number */
  121.     Boolean        filler1;            /* filler */
  122.     int         activeLap;            /* index of LAP in a multi-LAP file */
  123.                                     /* for built-in, 128 - AppleTalk, 129 - Ethernet */
  124.     int         slot;                /* slot number if Mac II */
  125.     String(32)    filename;            /* file name if external net interface */
  126.     };
  127.     
  128. /* values for LAP flags */
  129. #define useFixedAddr     0x800        /* used fixed node address */
  130. #define useDynamic        0x400        /* pick node address dynamically */
  131. #define useRARP            0x200        /* use reverse-ARP to get IP address */
  132. #define useSMQ            0x100        /* use ICMP subnet mask query packet */            
  133. #define useBootP        0x40
  134.  
  135. #define useKIPGW        0x008       /* use a KIP gateway */
  136. #define useFixedGW        0x004        /* use fixed gateway address */
  137. #define    useRIP            0x002        /* use RIP to find gateways */                    
  138. #define useProxyARP        0x001        /* use proxy-ARP on this net */                    
  139.  
  140. typedef OSErr (*LapStatProcPtr)(struct LAPInfo *lap, struct LAPStats *lapStatsPtr);
  141.  
  142. #define LAPINFO    \
  143.     b_32        our_ip_addr;    /* LAP's IP address */                             \
  144.     b_32        our_net_mask;    /* LAP's IP net-mask */                            \
  145.     b_32        ip_broadcast_addr;    /* IP's broadcast address */                \
  146.     struct IPConfig lc;            /* copy of IP LAP configuration resource */        \
  147.     /* dispatch table for LAP function routines */                                \
  148.     OSErrProcPtr    lapInit;        /* pointer to once-only LAP init routine */        \
  149.     OSErrProcPtr    lapOpen;        /* LAP open routine */                            \
  150.     OSErrProcPtr    lapClose;        /* LAP close routine */                            \
  151.     voidProcPtr        lapUnload;        /* LAP unload routine, undoes LapInit */        \
  152.     OSErrProcPtr    lapAttach;        /* LAP attach PH routine */                        \
  153.     OSErrProcPtr    lapDetach;        /* LAP detach routine */                        \
  154.     OSErrProcPtr    lapOutput;        /* LAP output routine */                        \
  155.     OSErrProcPtr    lapControl;        /* LAP control routine */                        \
  156.     voidProcPtr        lapFault;        /* LAP fault isolation routine */                \
  157.     LapStatProcPtr    lapStatistics;    /* LAP statistic reading routine */                \
  158.     voidProcPtr        lapConfigure;    /* LAP-specific configuration routines */        \
  159.     BooleanProcPtr    lapProbe;        /* send a LAP-specific address probe packet */    \
  160.     BooleanProcPtr    lapRegister;    /* register our IP address on the network */    \
  161.     voidProcPtr        lapFindGateway;    /* LAP-specific means of finding a gateway */    \
  162.     BooleanProcPtr    lapGwyCheck;    /* LAP-specific means of verifying gateway up */\
  163.                                                                                 \
  164.     /* IP parameters */                                                            \
  165.     ip_addr        dfl_dns_addr;    /* address of DNS from config protocol */        \
  166.     Handle        dnslHndl;        /* handle to DNS configuration resource */        \
  167.     Ptr            dnsCache;        /* pointer to space allocated for dns cache */    \
  168.     int            dnsCacheSize;    /* size of cache allocated, in bytes */            \
  169.                                                                                 \
  170.     /* LAP parameters */                                                        \
  171.     int            headerSize;        /* LAP header space requirements */                \
  172.     int            trailerSize;    /* LAP trailer space requirements */            \
  173.     int            outMaxPacketSize;    /* size of maximum output packet */            \
  174.     int            inMaxPacketSize;    /* size of maximum input packet */            \
  175.     int            maxDataSize;        /* size of maximum data packet */            \
  176.     int            numConnections;    /* number of separate network connections */    \
  177.     unsigned long versionFlags;    /* version number flags */                        \
  178.                                                                                 \
  179.     voidProcPtr    ip_ph;            /* pointer to IP's protocol handler */            \
  180.     Ptr            ipGlobals;        /* pointer to IP's A5 */                        \
  181.     short        link_unit;        /* unit number of link driver */                \
  182.     Boolean     addressConflict;/* TRUE if address conflict discovered */        \
  183.     int            lapType;        /* IP LAP hardware type number */                \
  184.     int            lapAddrLength;    /* size of LAP address field */                    \
  185.     unsigned char *lapAddrPtr;    /* pointer to LAP address field */                \
  186.     ProcPtr*    lapCodeHndl;    /* handle of LAP code resource */
  187.  
  188.  
  189. /* values for IP and Net config */
  190. #define LAPcnfg        1            /* LAP-specific procedure worked last time */        
  191. #define BootPcnfg    2            /* bootp worked last time */            
  192. #define Fixedcnfg    3            /* user had to enter address last time */    
  193. #define SMQcnfg        1            /* subnet-mask query worked last time */    
  194. #define FixedSMcnfg    2            /* user had to enter subnet-mask last time */
  195.  
  196. struct LAPInfo {
  197.     LAPINFO
  198.     };
  199.